﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace my_test
{
    class Program
    {
        static void Main(string[] args)
        {
            // ListNode[] listNodes = new ListNode[5];
            // for (int i = 0; i < listNodes.Length; i++)
            // {
            //     listNodes[i] = new ListNode(i);
            // }
            // for (int i = 0; i < listNodes.Length - 1; i++)
            // {
            //     listNodes[i].next = listNodes[i + 1];

            // }
            // ListNode[] listNodes2 = new ListNode[5];
            // for (int i = 0; i < listNodes2.Length; i++)
            // {
            //     listNodes2[i] = new ListNode(i);
            // }
            // for (int i = 0; i < listNodes2.Length - 1; i++)
            // {
            //     listNodes2[i].next = listNodes2[i + 1];

            // }
            //Console.WriteLine("Hello World!" + new Program().MergeTwoLists(listNodes[0], listNodes2[0]).val);
            // int[] nums = { 5, 5, 6, 6, 8, 1 };
            // nums = new Solution().SingleNumbers(nums);
            int[][] nums = new Solution().FindContinuousSequence(9);
            for (int i = 0; i < nums.Length; i++)
            {
                for (int j = 0; j < nums[i].Length; j++)
                {
                    Debug.WriteLine(nums[i][j]);
                }

            }
        }


        // public class TreeNode
        // {
        //     public int val;
        //     public TreeNode left;
        //     public TreeNode right;
        //     public TreeNode(int x) { val = x; }
        // }

        class Solution
        {
            public class Node
            {
                public int val;
                public Node next;
                public Node(int _val)
                {
                    val = _val;
                }
            }
            //滑动窗口的学习
            //输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
            //序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
            // 输入：target = 9
            // 输出：[[2,3,4],[4,5]]

            public int[][] FindContinuousSequence(int target)
            {
                int left = 1;
                int right = 2;
                int sum = left + right;
                int count = 0;

                List<int[]> result = new List<int[]>();
                while (left < right)
                {
                    if (sum < target)
                    {
                        right++;
                        sum += right;
                    }
                    else if (sum == target)
                    {
                        int length = right - left + 1;
                        int[] temp = new int[length];
                        int x = 0;
                        for (int j = left; j <= right; j++)
                        {
                            temp[x] = j;
                            x++;
                        }
                        result.Add(temp);

                        sum -= left;
                        left++;

                    }
                    else
                    {
                        sum -= left;
                        left++;
                    }
                }

                // for (int i = 1; i < target / 2; i++)
                // {

                // }
                return result.ToArray();
            }

            public int last(int n, int m)
            {


                //第一步存储为一个循环 链表 
                Node root = new Node(0);
                List<Node> numList = new List<Node>();
                for (int i = 1; i < n; i++)
                {
                    root.next = new Node(i);
                    numList.Add(root);
                    root = root.next;
                    if (i == n - 1)
                    {
                        numList.Add(root);
                        root.next = numList[0];
                    }

                }
                if (m == 1)
                {
                    return numList[numList.Count - 1].val;
                }
                //头尾衔接
                root.next = numList[0];
                root = numList[0];
                // while (n > 1)
                // {
                //     //第二步进行 相应操作
                //     for (int i = 1; i < m; i++)
                //     {

                //         if ((i == m - 1))
                //         {
                //             root.next = root.next.next;
                //             root = root.next;
                //         }
                //         else
                //         {
                //             root = root.next;
                //         }
                //     }
                //     n--;
                // }
                while (root.next != null && root.val != root.next.val)
                {
                    // if (m==1)
                    // {
                    //     return numList[numList.Count-1].val;
                    // }


                    //第二步进行 相应操作
                    for (int i = 1; i < m; i++)
                    {
                        if ((i == m - 1))
                        {
                            root.next = root.next.next;
                            root = root.next;
                        }
                        else
                        {
                            root = root.next;
                        }
                    }
                }
                return root.val;
            }

        }
    }


}
